﻿#define _CRT_SECURE_NO_WARNINGS 
#include <stdio.h>

//struct stu 
//{
//	char  name[20];
//	int  age;
//	float score;
// };
//
//int main()
//{
//	struct stu s = { "zhangsan",18,65.9f };
//	struct stu tmp = { 0 };
//	char arr[100] = { 0 };
//	// 上面这个是输出（输出到电脑的屏幕）
//	sprintf(arr,"%s %d %f", s.name, s.age, s.score); //把格式化的数据转化为字符串 
//	//printf("%s %d %.1f", s.name, s.age, s.score);
//	printf("%s\n", arr); 
//	
//	// 现在是输入（键盘）
//	sscanf(arr,"%s %d %f", tmp.name, &(tmp.age), &(tmp.score));  //从一个字符串中读取一个格式化的数据
//	printf("%s %d %f\n", tmp.name, tmp.age, tmp.score);
//	return 0;
//}

//int main()
//{
//     //打开文件
//	FILE* pf = fopen("data.txt","r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//	fseek(pf, 0, SEEK_END); 
//
//	//读文件
//	//int ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	// ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//
//	int n = ftell(pf);  //偏移量就是字节嘛
//	printf("%d\n", n); 
//
//	//fseek(pf, -4, SEEK_CUR); //当前
//	//fseek(pf, -6, SEEK_END);  //文件末尾
//	//fseek(pf, 0, SEEK_SET);  //文件开头
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}


//int main()
//{
//	//打开文件
//	FILE* pf = fopen("data.txt", "r");
//	if (pf == NULL)
//	{
//		perror("fopen");
//		return 1;
//	}
//
//	//读文件
//	int ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	 ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	
//
//	//fseek(pf, -4, SEEK_CUR); //当前
//	//fseek(pf, -6, SEEK_END);  //文件末尾
//	//fseek(pf, 0, SEEK_SET);  //文件开头
//
//	rewind(pf);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	rewind(pf);
//	ch = fgetc(pf);
//	printf("%c\n", ch);
//
//	//ch = fgetc(pf);
//	//printf("%c\n", ch);
//	
//	//关闭文件
//	fclose(pf);
//	pf = NULL;
//	return 0;
//}

// feof 的作用：在文件读取结束后，判断是否因为遇到文件末尾而结束  feof
// ferror 的作用：在文件读取结束后，判断是否因为遇到错误而结束

//#include<windows.h> 
//
//int main(void)
//{
//	int c; // 注意：int，⾮char，要求处理EOF
//	FILE* fp = fopen("test.txt", "r");
//	if (!fp) {
//		perror("File opening failed");
//		return EXIT_FAILURE;
//	}
//	//fgetc 当读取失败的时候或者遇到⽂件结束的时候，都会返回EOF
//	while ((c = fgetc(fp)) != EOF) // 标准C I/O读取⽂件循环
//	{
//		putchar(c);
//	}
//	//判断是什么原因结束的
//	if (ferror(fp))
//		puts("I/O error when reading");
//	else if (feof(fp))
//		puts("End of file reached successfully");
//	fclose(fp);
//}
  //判断是什么原因结束的
//if (ferror(fp))  //判断是否遇到错误而结束
//puts("I/0 error when reading");
//else if (feof(fp))  //判断是否遇到文件的末尾而结束   feof 可以看到大写的是EOF 就是表示错误值
//puts("End of file reached successfully");

#include <windows.h>
//VS2019 WIN11环境测试
int main()
{
	FILE* pf = fopen("test.txt", "w");
	fputs("abcdef", pf);//先将代码放在输出缓冲区
	printf("睡眠10秒 - 已经写数据了，打开test.txt ⽂件，发现⽂件没有内容\n");  //鹏哥的复制
	//printf("睡眠10秒 - 已经写数据了，打开test.txt 文件，发现文件没有内容\n");
	Sleep(10000);  //一万 就是 10个一千毫秒
	printf("刷新缓冲区\n");
	fflush(pf);//刷新缓冲区时，才将输出缓冲区的数据写到⽂件（磁盘）  刷新缓冲区   fflush 
	//注：fflush 在⾼版本的VS上不能使⽤了
	printf("再睡眠10秒-此时，再次打开test.txt ⽂件，⽂件有内容了\n"); //鹏哥的复制
	//printf("睡眠10秒 - 已经写数据了，打开test.txt 文件，发现文件没有内容\n");
	Sleep(10000);
	fclose(pf);   //也是自带刷新缓冲区
	//注：fclose在关闭⽂件的时候，也会刷新缓冲区
	pf = NULL;
	return 0;
}
